<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			/*
				函数
					-函数也是对象
					-函数中可以封装一些代码，在需要是可以执行这些代码
					-函数中可以保存一些代码在需要的时候调用
					var fun = new Function();
					-使用typeof检查一个函数对象是，会返回function
					var fun = new Function("alert("yigehanshua")");
					这个函数不会立即执行只有在函数被调用时回执行
					调用函数时，函数中的代码会按照顺序执行
					fun();
					函数对象具有普通对象的所用功能
					在实际开发中我们不会使用创建对象来创建函数
					通常使用函数声明来创建函数
					方式一：
						function 函数名 (参数){
							语句
							}
					方式二：
						var 函数名 = function（参数）{
							语句
						}；
				函数的参数
					-可以在函数中来指定一个或多个形参
						多个形参之间使用，隔开，声明形参相当于在函数内部声明了对应的变量
						但是并不赋值
					-在调用函数时，可以（）中指定实参
						实参将会赋值给函数
					-调用函数时解析器不会检查参数的类型
						所以要注意，是否可能接受到非法的参数，如果有可能则需要对参数进行
						类型的检查
					-调用函数时，解析器也不会检查实参的数量
						多余的实参不会被赋值
						如果实参的数量少于形参的数量，则没有对应实参的形参将是undefined
				函数的返回值
					-可以使用return来设置函数的返回值
						语法：
							return 值
						return后的值将会作为函数的结果返回	
					-可以在调用函数时
						var sun = sum();
						这样sum函数的返回值就会传递到sun变量中
					return后的语句都不会在执行
						function sum(){
							语句1；
							return 0；
							语句2
						}
						语句二不会被执行
					如果函数中不写return或者只写一个return也会返回一个undefined	
					返回值可以时任何类型的数据类型或者式子也可以是一个函数
					实参可以时任意数据类型包括对象，如果参数过多时可以先把参数包装成对象
						比如
							function say(o){
								alert("名字"+o.name+"年龄"+o.age+"性别"+o.gender)
							}
							var obj= { 
								name:"小明",
								age：18,
								gender:"男"
							};
							say(obj);
					实参可以是一个对象，也可以是一个函数
						fun(say())这个参数 相当于时say()返回值
						fun(say)这个参数时一个函数
					立即执行函数
						函数定义完，立即被调用，这种函数就是立即执行函数
						这种函数往往只会调用一次
						(function(){})();
					对象的属性值可以时任何的数据类型，包括函数
						如果一个函数作为一个对象的属性保存
						那么我们就成这个函数时这个对象的一个方法
						调用函数就是说调用这个函数的方法（method）
						但是它只是名称上的说法
							obj.name()   //调用方法
							name()		//调用函数
					枚举中的对象属性
						使用for...in 语句
						语法：
							for(var 变量 in 对象){
								
							}
						for...in语句对象中有几个属性，循环体就会执行基础
							每次执行时，会将对象中的一个属性的名字赋值给变量
						例子：
							for(var n in obj){
								console.log("属性名："+n+"属性值："+obj[n])
							}
					函数的方法
						-当对函数调用call()和apply()时都是调用函数，使函数执行
						-当我们使用call()和apply()时，可以将一个对象指定为第一个参数
							此时这个对象将成为函数的执行的this
						-call()方法可以将实参在对象之后依次传递
						-apply()方法需要将实参封装到一个数组中统一传递
						-this的情况：
							1.以函数的形式调用时，this永远都是window
							2.以方法的形式调用时，this时调用方法的对象
							3.以构造函数的形式掉用时，this时新创建的那个对象
							4.使用call和apply调用时，this时指定的那个对象
					arguments
						-在调用函数时，浏览器每次都会传递进两个隐含的参数；
							1.函数的上下文对象this
							2.封装实参的对象arguments
								-arguments是一个类数组对象，他也可以通过索引来操作数据，也可以获取长度
								-在调用函数时，我们所传递的实参都会在arguments中保存
								-arguments.length可以用来获取实参的长度
								-我们即使不定义形参，也可以通过arguments来获取实参
									只不过比较麻烦
									arguments[0]表示第一个实参
						-arguments有一个属性叫做callee
							这个属性对应一个函数对象，就是当前正在指向的函数对象
					
							
								
			*/
		   Arguments
		</script>
	</head>
	<body>
	</body>
</html>
